﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using ServicioComunitario2.Logica.Clases;
using ServicioComunitario2.Logica.Excepciones;
using ServicioComunitario2.EnlaceDatos;




namespace ServicioComunitario2.EnlaceDatos.SqlServer
{
    public class SqlNoticia 
    {
        #region Insertar Noticia
       

        public bool InsertarNoticia(Noticia _miNoticia)
        {
           
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();


            try
            {
                //Se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[AgregarNoticia]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@fechaNot", _miNoticia.FechaNoticia);
                command.Parameters.AddWithValue("@cuerpoNot", _miNoticia.CuerpoNoticia);
                command.Parameters.AddWithValue("@personaNot", _miNoticia.IdAutor);

                command.Parameters["@fechaNot"].Direction = ParameterDirection.Input;
                command.Parameters["@cuerpoNot"].Direction = ParameterDirection.Input;
                command.Parameters["@personaNot"].Direction = ParameterDirection.Input;
               
               // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                command.ExecuteReader();

               return true;
            }
            catch (SqlException)
            {
                return false;
            }
            catch (Exception e)
            {
                return false;
            }

             //se cierra la conexion una vez ejecutado el comando.
            finally
            {
                miConexion.CerrarConexionBd();
            }
        }


        #endregion Final de la funcion InsertarNoticia


        #region Consultar detalle de una noticia

        public Noticia DetalleNoticia(int numNoticia) {

            Noticia noticiaConsultada = new Noticia();
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;

            try
            {
                //Se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[DetallesNoticia]";
                command.CommandTimeout = 10;
                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@idNoticia", numNoticia);
                command.Parameters["@idNoticia"].Direction = ParameterDirection.Input;
                
                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                reader = command.ExecuteReader();
                if (reader.Read())
                {
                    noticiaConsultada.FechaNoticia = reader.GetDateTime(0);
                    noticiaConsultada.CuerpoNoticia = reader.GetString(1);
                    noticiaConsultada.IdAutor = reader.GetInt32(2);

                }
                
            }
            catch 
            {
                return noticiaConsultada;
            }

            return noticiaConsultada;
        }

        #endregion

        #region modificar una noticia

        public bool ModificarNoticia(int numNoticia, Noticia _miNoticia)
        {

            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();


            try
            {
                //Se abre la conexion a la base de datos
                miConexion.AbrirConexionBd();
                //se introducen los datos de la conexion y el nombre del stored procedure a utilizar
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ModificarNoticia]";
                command.CommandTimeout = 10;

                //Se introducen los parametros del stored procedure
                command.Parameters.AddWithValue("@fechaNot", _miNoticia.FechaNoticia);
                command.Parameters.AddWithValue("@cuerpoNot", _miNoticia.CuerpoNoticia);
                command.Parameters.AddWithValue("@idNot", _miNoticia.IdAutor);

                command.Parameters["@fechaNot"].Direction = ParameterDirection.Input;
                command.Parameters["@cuerpoNot"].Direction = ParameterDirection.Input;
                command.Parameters["@idNot"].Direction = ParameterDirection.Input;

                // se ejecuta el comando, se ejecuta el stored procedure InsertarEscuela
                command.ExecuteReader();

                return true;
            }
            catch (SqlException)
            {
                return false;
            }
            catch (Exception e)
            {
                return false;
            }

             //se cierra la conexion una vez ejecutado el comando.
            finally
            {
                miConexion.CerrarConexionBd();
            }
        }

        #endregion

        #region listar las noticias

        public List<Noticia> ListarTodasNoticas() 
        {
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            List<Noticia> miListaNoticia = new List<Noticia>();

            try
            {
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ListarNoticias]";
                command.CommandTimeout = 10;
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Noticia miNoticia = new Noticia();
                    //en este caso es realmente el id de la noticia
                    miNoticia.IdAutor = reader.GetInt32(0);
                    //de resto sigue igual
                    miNoticia.FechaNoticia = reader.GetDateTime(1);
                    miNoticia.AutorNoticia = reader.GetString(3); 
                    miNoticia.CuerpoNoticia = reader.GetString(2).ToString().Substring(0,6);

                    miListaNoticia.Add(miNoticia);
                }

                return miListaNoticia;

            }
            catch (SqlException)
            {
                return miListaNoticia;//cambiar luego es una prueba
            }
            finally
            {
                miConexion.CerrarConexionBd();
            }

        
        }

         #endregion

        #region listar noticias de una persona

        public List<Noticia> ListarTodasNoticasModificar(int autorNoticias)
        {
            Conexion miConexion = new Conexion();
            SqlCommand command = new SqlCommand();
            SqlDataReader reader = null;
            List<Noticia> miListaNoticia = new List<Noticia>();

            try
            {
                miConexion.AbrirConexionBd();
                command.Connection = miConexion.ObjetoConexion();
                command.CommandType = System.Data.CommandType.StoredProcedure;
                command.CommandText = "[dbo].[ListarNoticiasPersona]";
                command.CommandTimeout = 10;
                command.Parameters.AddWithValue("@idPersona", autorNoticias);
                command.Parameters["@idPersona"].Direction = ParameterDirection.Input;
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    Noticia miNoticia = new Noticia();
                    //en este caso es realmente el id de la noticia
                    miNoticia.IdAutor = reader.GetInt32(0);
                    //de resto sigue igual
                    miNoticia.FechaNoticia = reader.GetDateTime(1);
                    miNoticia.AutorNoticia = reader.GetString(3);
                    miNoticia.CuerpoNoticia = reader.GetString(2).ToString().Substring(0, 8);

                    miListaNoticia.Add(miNoticia);
                }

                return miListaNoticia;

            }
            catch (SqlException)
            {
                return miListaNoticia;//cambiar luego es una prueba
            }
            finally
            {
                miConexion.CerrarConexionBd();
            }


        }
        #endregion
    }
}